package com.ruoyi.merchant.mapper;

import com.ruoyi.merchant.domain.Order;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 订单Mapper接口
 */
public interface OrderMapper {
    /**
     * 查询订单
     */
    Order selectOrderByOrderId(Long orderId);

    /**
     * 根据订单号查询
     */
    Order selectOrderByOrderNo(@Param("orderNo") String orderNo);

    /**
     * 查询订单列表
     */
    List<Order> selectOrderList(Order order);

    /**
     * 查询商家订单列表（带筛选）
     */
    List<Order> selectMerchantOrderList(@Param("merchantId") Long merchantId,
                                        @Param("status") Integer status,
                                        @Param("paymentStatus") Integer paymentStatus,
                                        @Param("orderNo") String orderNo,
                                        @Param("pickupCode") String pickupCode,
                                        @Param("startTime") String startTime,
                                        @Param("endTime") String endTime);

    /**
     * 更新订单状态
     */
    int updateOrderStatus(@Param("orderId") Long orderId,
                         @Param("status") Integer status,
                         @Param("merchantId") Long merchantId);

    /**
     * 更新订单（通用）
     */
    int updateOrder(Order order);

    /**
     * 批量更新订单状态（含预计完成时间）
     */
    int batchUpdateOrderStatus(@Param("orderIds") Long[] orderIds,
                               @Param("status") Integer status,
                               @Param("estimatedReadyMin") Integer estimatedReadyMin,
                               @Param("merchantId") Long merchantId);

    /**
     * 订单统计（按状态）
     */
    Map<String, Object> countOrderByStatus(@Param("merchantId") Long merchantId);

    /**
     * 今日订单统计
     */
    Map<String, Object> countTodayOrders(@Param("merchantId") Long merchantId);

    /**
     * 营业额统计
     */
    Map<String, Object> sumOrderAmount(@Param("merchantId") Long merchantId,
                                       @Param("startTime") String startTime,
                                       @Param("endTime") String endTime);

    /**
     * 查询待处理订单数（待接单 + 制作中）
     */
    int countPendingOrders(@Param("merchantId") Long merchantId);
}
